package com.seed.bpmn.engine.common.util;

import net.sf.json.JSON;
import net.sf.json.JSONObject;

/**
 * 操作是否成功的JSON对象表示。
 *
 * @author cscz89@126.com
 */
public class ResultData<T> {

    public final static String STAT_FAILURE     = "0";
    public final static String STAT_SUCCESS     = "1";
    public final static String STAT_NOT_LOGINED = "2";
    public final static String STAT_NO_AUTH     = "3";

    // 操作结果：0.失败；1.成功；2.未登录；3.没有权限；
    private String             stat;

    // 给客户端的提示信息
    private String             message;

    private T                  data;

    public ResultData() {
        super();
    }

    /**
     *
     * @param stat
     * @param message
     */
    public ResultData(String stat, String message) {
        this.stat = stat;
        this.message = message;
    }

    /**
     * 获得成功的操作结果
     *
     *
     * @param message
     * @return
     */
    public static ResultData success(String message) {
        ResultData result = new ResultData(STAT_SUCCESS, message);
        return result;
    }

    /**
     * 获得成功的操作结果
     *
     *
     * @param message
     * @return
     */
    public static ResultData success(String message, Object data) {
        ResultData result = new ResultData(STAT_SUCCESS, message);
        result.setData(data);
        return result;
    }

    /**
     * 获得成功的操作结果,直接以JSON表示
     *
     * @param message
     * @return
     */
    public static JSON successToJson(String message) {
        ResultData result = new ResultData(STAT_SUCCESS, message);
        return result.toJson();
    }

    /**
     * 获得失败的操作结果,直接以JSON表示
     *
     * @param message
     * @return
     */
    public static JSON failureToJson(String message) {
        ResultData result = new ResultData(STAT_FAILURE, message);
        return result.toJson();
    }

    /**
     * 获得失败的操作结果,直接以JSON表示
     *
     * @param message
     * @return
     */
    public static ResultData failure(String message) {
        ResultData result = new ResultData(STAT_FAILURE, message);
        return result;
    }

    /**
     *
     * @return 返回的对象
     */
    public T getData() {
        return data;
    }

    /**
     * 返回的对象
     *
     * @param data
     */
    public void setData(T data) {
        this.data = data;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 是否成功，兼容老系统，现在使用stat属性。
     *
     * @return
     */
    public boolean isSuccess() {
        return STAT_SUCCESS.equals(this.stat);
    }

    /**
     * 将当前对象转换为JSON对象。
     *
     * @return
     */
    public JSON toJson() {
        return JSONObject.fromObject(this);
    }

    public String getStat() {
        return stat;
    }

    public void setStat(String stat) {
        this.stat = stat;
    }

}
